/*
 * @Author: gaozhanfei gaozhanfei@jryghq.com
 * @Date: 2022-11-24 15:20:00
 * @LastEditors: gaozhanfei gaozhanfei@jryghq.com
 * @LastEditTime: 2024-03-07 15:57:46
 * @FilePath: /activity-ygcx-nuxt-client/utils/AESUtils.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// eslint-disable-next-line import/no-extraneous-dependencies
import CryptoJS from 'crypto-js'

export function Encrypt(val, tokenKey, type) {
  const key = CryptoJS.enc.Hex.parse(tokenKey) // 密钥：一个常量，前后端协定后一个字符串即可
  // const iv = CryptoJS.enc.Utf8.parse('0123456789ABCDEF') // 偏移量：一个常量，前后端协定后一个字符串，前后端一致即可
  if (type === 'form') {
    Object.keys(val).forEach((item) => {
      // #ifdef MP-ALIPAY
      if (val[item] === undefined) {
        delete val[item]
        return
      }
      // #endif
      val[item] = String(val[item])
    })
  }
  const srcs = CryptoJS.enc.Utf8.parse(JSON.stringify(val))
  const encrypted = CryptoJS.AES.encrypt(srcs, key, {
    // iv,
    mode: CryptoJS.mode.ECB, // mode 与后台一致。有多个模式可选
    padding: CryptoJS.pad.Pkcs7 //
  })
  // console.log(encrypted.ciphertext.toString(), encrypted.toString())
  // 需要返回base64格式的加密结果，使用此句
  // return encrypted.toString()
  return CryptoJS.enc.Base64.stringify(encrypted.ciphertext)

  // 需要返回hex格式的加密结果，使用此句
  // return encrypted.ciphertext.toString().toUpperCase()
}

// 解密
export function Decrypt(str, tokenKey, baseEnv) {
  const baseKey = baseKeyConfig(baseEnv)
  const key = CryptoJS.enc.Hex.parse(tokenKey || baseKey) // 密钥：一个常量，前后端协定后一个字符串即可
  // const iv = CryptoJS.enc.Utf8.parse(baseKey) // 偏移量：一个常量，前后端协定后一个字符串，前后端一致即可

  const base64 = CryptoJS.enc.Base64.parse(str)
  const src = CryptoJS.enc.Base64.stringify(base64)

  const decrypt = CryptoJS.AES.decrypt(src, key, {
    // iv,
    // mode: CryptoJS.mode.ECB,
    mode: CryptoJS.mode.ECB, // mode 与后台一致。有多个模式可选
    padding: CryptoJS.pad.Pkcs7
  })

  const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
  // console.log('哈哈哈哈', decryptedStr)
  // console.log('heihei', decryptedStr.toString())
  return decryptedStr.toString()
}
